const Stack = require('./01-stack_es5');

/**
 * 
 * @param {*} str 比如：{}()()[]
 * @returns boolean类型
 */
function isValid(str) {
  // 构建一个栈
  var stack = new Stack();
  // 遍历字符串
  for (var i = 0; i < str.length; i++) {
    // 当前元素
    var current = str[i];
    if (current == '{') {
      stack.push('}');
    } else if (current == '(') {
      stack.push(')');
    } else if (current == '[') {
      stack.push(']');
    } else {
      // 遇到右括号,判断栈顶元素是否和当前括号相同即可
      // 同时出栈
      var stackTop = stack.pop();
      // 只要有一个顺序不同，则返回false
      if (current !== stackTop) {
        return false;
      }
    }
  }
  // 如果栈最终为空，说明字符串完全符合规则。
  return !stack.isEmpty();
}

console.log(isValid('()[]{}'));
console.log(isValid('()[('));